package com.lazily.map_;


import java.util.*;

/**
 * @Author: GZQ
 * @date: 2025/6/1 22:58
 * @description: Map 接口遍历方式
 * @version: 1.0
 */


@SuppressWarnings({"all"})
public class MapFor {
	// 程序入口
	public static void main(String[] args) {

		Map map = new HashMap();
		map.put("邓超", "孙俪");
		map.put("王宝强", "马蓉");
		map.put("宋喆", "马蓉");
		map.put("刘令博", null);
		map.put(null, "刘亦菲");
		map.put("鹿晗", "关晓彤");

		// 第一组: 先取出 所有的key, 通过Key 取出对应的Vaalue
		Set keySet = map.keySet();
		// (1) 增强for
		System.out.println("----第一种方式 使用keySet --> 增强for ----");
		for (Object key : keySet) {
			System.out.println(key + "-" + map.get(key));
		}

		// (2) 迭代器
		System.out.println("----第二种方式 使用keySet --> 迭代器 ----");
		Iterator iterator = keySet.iterator();
		while (iterator.hasNext()) {
			Object next = iterator.next();
			System.out.println(next + "-" + map.get(next));
		}


		// 	第二组: 把所有的values取出
		Collection values = map.values();
		// 这里可以使用所有的 Collection 使用的遍历方法
		// (1) 增强for
		System.out.println("----取出所有的value 增强for----");
		for (Object value : values) {
			System.out.println(value);
		}

		// 	(2) 迭代器
		System.out.println("----取出所有的value 使用迭代器----");
		Iterator iterator1 = values.iterator();
		while (iterator1.hasNext()) {
			Object value = iterator1.next();
			System.out.println(value);
		}


		// 	第三组: 通过EntrySet 来获取 k-v
		Set entrySet = map.entrySet();
		// 增强for
		System.out.println("-----使用entrySet 的 增强for----");
		for (Object entry : entrySet) {
			// 	将entry 转成 Map.Entry
			Map.Entry m = (Map.Entry) entry;
			System.out.println(m.getKey() + "-" + m.getValue());
		}

		// 	(2) 迭代器
		System.out.println("-----使用EntrySet 的 迭代器(第4种)----");
		Iterator iterator2 = entrySet.iterator();
		while (iterator2.hasNext()) {
			Object entry = iterator2.next();
			// System.out.println(entry.getClass()); // HashMap@Node 实现--> Map.Entry (getKey, getValue)
			// 向下转型 Map.Entry
			Map.Entry m = (Map.Entry) entry;
			System.out.println(m.getKey() + "-" + m.getValue());
		}
	}
}
